<?php
/**
 * 自定义数学计算相关方法 
 * 
 * Created		: 2011-06-14
 * Modified		: 2011-07-06 
 * @link		: http://www.qixbo.com
 * @copyright	: [Qixbo.Com] (c) 2011
 * @version		: 0.2.0
 * @author		: Joseph Chen (jsph.chen@gmail.com)
 * @see			: http://blog.xe28.tk/archives/188/
 */
class MMath
{
	
	/** 
	* 返回一字符串，十进制 number 以 radix 进制的表示。 
	* @param int dec       需要转换的数字 
	* @param int toRadix    输出进制。当不在转换范围内时，此参数会被设定为 2，以便及时发现。 
	* @return    指定输出进制的数字 
	*/ 
	public static function dec2Any($dec)
	{
		$radix = 62;
		$out = '';
	    $charlist = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
        $t = ($dec == 0) ? 0 : floor(log10($dec) / log10($radix));
        for ($t; $t >= 0; $t--) {
            $a = floor($dec / pow($radix, $t));
            $out = $out . substr($charlist, $a, 1);
            $dec = $dec - ($a * pow($radix, $t));
        }
        return $out;
	} 
	
	/** 
	* 返回一字符串，包含 number 以 10 进制的表示。<br /> 
	* fromBase 只能在 2 和 62 之间（包括 2 和 62）。 
	* @param int number    输入数字 
	* @param int fromRadix    输入进制 
	* @return  十进制数字 
	*/ 
	public static function any2Dec($number, $fromRadix) { 
	    $charlist = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZz'; 
	    $dec = 0; 
	    $digitValue = 0; 
	    $len = strlen($number) - 1; 
	    for ($t = 0; $t <= $len; $t++) { 
	        $digitValue = strpos($charlist, $number[$t]); 
	        $dec = bcadd(bcmul($dec, $fromRadix), $digitValue); 
	    } 
	    return $dec; 
	}
	
	
}
